# -*- coding: utf-8 -*-
"""
@Time    : 2024/6/26 16:37 
@Author  : ZhangShenao 
@File    : tuple.py 
@Desc    : Tuple
Tuple是不可变的(Immutable),一旦创建之后,就不可以再添加元素,也不可以修改和删除元素
在一般情况下,tuple的性能略高于list,但是差异并不是很大
在选择list个tuple时,通常围绕着可变和不可变的特性进行
当我们需要添加元素或修改元素时,就使用list
当我们希望所有元素在创建之后便不再改变,就使用tuple
"""

# 创建tuple
t1 = (1, 2, 3)
print(f't1: {t1}')

# tuple是immutable的,不可以修改
# t1[1] += 10  # TypeError: 'tuple' object does not support item assignment

# 创建只包含一个元素的元组,元素末尾需要增加','
t2 = (1,)
print(f't2: {t2}')
# 如果不加',',Python会把它这个括号当作优先级符号进行处理
# t3 = (1)
# print(f'type of t3: {type(t3)}')  # type of t3: <class 'int'>

# 通过索引获取tuple中的元素
t4 = (1, 2, 3, 4)
print(f't4[2]: {t4[2]}')  # t4[2]: 3

# 使用index()函数,获取元素在tuple中第一次出现的索引
t5 = (1, 2, 3, 4, 3, 2, 1)
print(f't5.index(2): {t5.index(2)}')  # t5.index(2): 1

# 使用in关键字,判断元素是否在tuple中
t6 = (1, 2, 3, 4)
print(f'1 is in t6? {1 in t6}')  # 1 is in t6? True
print(f'10 is in t6? {10 in t6}')  # 10 is in t6? False

# 使用count()函数,统计元素在tuple中出现的次数
t7 = (1, 1, 1, 2, 2, 3, 3, 3, 3)
print(f'count of 3 is : {t7.count(3)}')  # count of 3 is : 4
print(f'count of 10 is : {t7.count(10)}')  # count of 10 is : 0

# 使用len()函数,获取tuple的长度
t8 = (1, 2, 3, 4)
print(f'length of t8 is: {len(t8)}')  # length of t8 is: 4

# 使用[start_index:end_index]实现tuple的切片操作,是一个左闭右开区间
t9 = (1, 2, 3, 4, 5, 6, 7, 8, 9)
t10 = t9[1:5]
print(f't10: {t10}')  # t10: (2, 3, 4, 5)
print(f't9: {t9}')  # 切片操作会生成一个新的tuple,原tuple不变

# 使用+拼接两个tuple,生成一个新的tuple
t11 = (1, 2, 3)
t12 = (4, 5, 6)
t13 = t11 + t12
print(f't13: {t13}')  # t13: (1, 2, 3, 4, 5, 6)
print(f't11: {t11}')  # 拼接后会生成一个新的tuple,原tuple不变

# 使用*实现tuple的复制操作
t14 = (1, 2, 3)
t15 = t14 * 2
print(f't15: {t15}')  # t15: (1, 2, 3, 1, 2, 3)
print(f't14: {t14}')  # 复制会生成一个新tuple,原tuple不变
